export default {
  // 当某月的天数
  getDaysInOneMonth(date) {
    const year = date.getFullYear();
    const month = date.getMonth() + 1;
    const d = new Date(year, month, 0);
    return d.getDate();
  },
  // 向前空几个
  getMonthweek(date) {
    const year = date.getFullYear();
    const month = date.getMonth() + 1;
    const dateFirstOne = new Date(year + '/' + month + '/1');
    return this.sundayStart ?
      dateFirstOne.getDay() == 0 ? 7 : dateFirstOne.getDay() :
      dateFirstOne.getDay() == 0 ? 6 : dateFirstOne.getDay() - 1;
  },
  /**
   * 获取当前日期上个月或者下个月
   */
  getOtherMonth(date, str = 'nextMonth') {
    const timeArray = this.dateFormat(date).split('/');
    const year = timeArray[0];
    const month = timeArray[1];
    const day = timeArray[2];
    let year2 = year;
    let month2;
    if (str === 'nextMonth') {
      month2 = parseInt(month) + 1;
      if (month2 == 13) {
        year2 = parseInt(year2) + 1;
        month2 = 1;
      }
    } else {
      month2 = parseInt(month) - 1;
      if (month2 == 0) {
        year2 = parseInt(year2) - 1;
        month2 = 12;
      }
    }
    let day2 = day;
    const days2 = new Date(year2, month2, 0).getDate();
    if (day2 > days2) {
      day2 = days2;
    }
    if (month2 < 10) {
      month2 = '0' + month2;
    }
    if (day2 < 10) {
      day2 = '0' + day2;
    }
    const t2 = year2 + '/' + month2 + '/' + day2;
    return new Date(t2);
  },
  // 上个月末尾的一些日期
  getLeftArr(date) {
    const arr = [];
    const leftNum = this.getMonthweek(date);
    const num = this.getDaysInOneMonth(this.getOtherMonth(date, 'preMonth')) - leftNum + 1;
    const preDate = this.getOtherMonth(date, 'preMonth');
    // 上个月多少开始
    for (let i = 0; i < leftNum; i++) {
      const nowTime = preDate.getFullYear() + '/' + (preDate.getMonth() + 1) + '/' + (num + i);
      arr.push({
        id: num + i,
        date: nowTime,
        isToday: false,
        otherMonth: 'preMonth',
      });
    }
    return arr;
  },
  // 下个月末尾的一些日期
  getRightArr(date) {
    const arr = [];
    const nextDate = this.getOtherMonth(date, 'nextMonth');
    const leftLength = this.getDaysInOneMonth(date) + this.getMonthweek(date);
    const _length = 7 - leftLength % 7;
    for (let i = 0; i < _length; i++) {
      const nowTime = nextDate.getFullYear() + '/' + (nextDate.getMonth() + 1) + '/' + (i + 1);
      arr.push({
        id: i + 1,
        date: nowTime,
        isToday: false,
        otherMonth: 'nextMonth',
      });
    }
    return arr;
  },
  // format日期
  dateFormat(date) {
    date = typeof date === 'string' ? new Date(date.replace(/\-/g, '/')) : date;
    return date.getFullYear() + '/' + (date.getMonth() + 1) + '/'
      + date.getDate();
  },
  // 获取某月的列表不包括上月和下月
  getMonthListNoOther(date) {
    const arr = [];
    const num = this.getDaysInOneMonth(date);
    const year = date.getFullYear();
    const month = date.getMonth() + 1;
    const toDay = this.dateFormat(new Date());
    const temp = [];
    const list = [];
    if (month == 2 && num == 28) {
      for (let i = 0; i <= num; i++) {
        const nowTime = year + '/' + month + '/' + (i + 1);
        if (i >= 7 && i <= 14) {
          if (i == 14) {
            let array = temp.reverse();
            for (let j = 0; j < array.length; j++) {
              arr.push({
                id: array[j].id,
                date: array[j].date,
                isToday: array[j].isToday,
                otherMonth: array[j].otherMonth,
              });
            }
            arr.push({
              id: i + 1,
              date: nowTime,
              isToday: toDay === nowTime,
              otherMonth: 'nowMonth',
            });
          } else {
            temp.push({
              id: i + 1,
              date: nowTime,
              isToday: toDay === nowTime,
              otherMonth: 'nowMonth',
            });
          }
        } else {
          if (i >= 21 && i <= 28) {
            if (i == 28) {
              let obj = list.reverse();
              for (let k = 0; k < obj.length; k++) {
                arr.push({
                  id: obj[k].id,
                  date: obj[k].date,
                  isToday: obj[k].isToday,
                  otherMonth: obj[k].otherMonth,
                });
              }
              if (num == 28) {
                arr.push({
                  id: i + 1,
                  date: nowTime,
                  isToday: toDay === nowTime,
                  otherMonth: 'blankMonth',
                });
              } else {
                arr.push({
                  id: i + 1,
                  date: nowTime,
                  isToday: toDay === nowTime,
                  otherMonth: 'nowMonth',
                });
              }
            } else {
              list.push({
                id: i + 1,
                date: nowTime,
                isToday: toDay === nowTime,
                otherMonth: 'nowMonth',
              });
            }
          } else {
            arr.push({
              id: i + 1,
              date: nowTime,
              isToday: toDay === nowTime,
              otherMonth: 'nowMonth',
            });
          }
        }
      }
    } else {
      for (let i = 0; i < num; i++) {
        const nowTime = year + '/' + month + '/' + (i + 1);
        if (i >= 7 && i <= 14) {
          if (i == 14) {
            let array = temp.reverse();
            for (let j = 0; j < array.length; j++) {
              arr.push({
                id: array[j].id,
                date: array[j].date,
                isToday: array[j].isToday,
                otherMonth: array[j].otherMonth,
              });
            }
            arr.push({
              id: i + 1,
              date: nowTime,
              isToday: toDay === nowTime,
              otherMonth: 'nowMonth',
            });
          } else {
            temp.push({
              id: i + 1,
              date: nowTime,
              isToday: toDay === nowTime,
              otherMonth: 'nowMonth',
            });
          }
        } else {
          if (i >= 21 && i <= 28) {
            if (i == 28) {
              let obj = list.reverse();
              for (let k = 0; k < obj.length; k++) {
                arr.push({
                  id: obj[k].id,
                  date: obj[k].date,
                  isToday: obj[k].isToday,
                  otherMonth: obj[k].otherMonth,
                });
              }
              arr.push({
                id: i + 1,
                date: nowTime,
                isToday: toDay === nowTime,
                otherMonth: 'nowMonth',
              });
            } else {
              list.push({
                id: i + 1,
                date: nowTime,
                isToday: toDay === nowTime,
                otherMonth: 'nowMonth',
              });
            }
          } else {
            arr.push({
              id: i + 1,
              date: nowTime,
              isToday: toDay === nowTime,
              otherMonth: 'nowMonth',
            });
          }
        }
      }
    }
    return arr;
  },
  // 获取某月的列表 用于渲染
  getMonthList(date) {
    return [...this.getLeftArr(date), ...this.getMonthListNoOther(date), ...this.getRightArr(date)];
  },
  // 默认是周一开始
  sundayStart: false,
};
